package com.jmxcfc.blfsc.common.validation.rule;

import com.jmxcfc.blfsc.common.common.ComConstants;
import com.jmxcfc.blfsc.common.sms.SmsConstants;
import com.jmxcfc.blfsc.common.validation.IRuleValidator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 功能描述
 * 短信模块的规则校验
 * @author: pay
 * @date: 2024年06月20日 17:23
 */
@Slf4j
public class SmsRulesUtil {

    private SmsRulesUtil() {
        throw new IllegalStateException("Utility class");
    }

    /**
     * 业务号字段校验
     * @return
     */
    public static RequestFieldRule getRequestNoRule(){
        return RequestFieldRule.of(ComConstants.REQUEST_NO,(IRuleValidator<String>) StringUtils::isNotBlank, StringUtils.join(ComConstants.REQUEST_NO,"流水号字段规则检验不符合"));
    }

    /**
     * 批量发送集合字段校验规则
     * @return
     */
    public static RequestFieldRule getSendDtlRule(){
        return RequestFieldRule.of(SmsConstants.SEND_DTL,(IRuleValidator<List<?>>) value -> value!=null&&!value.isEmpty(), StringUtils.join(SmsConstants.SEND_DTL,"批量发送集合列表字段规则检验不符合"));
    }


    /**
     * 请求流水号(基础服务平台生成)
     94语音对应requestId字段的概念
     玄武对应batchId的概念
     集微对应transactionId字段的概念
     * @return
     */
    public static RequestFieldRule getSerialSeqRule(String errorDesc){
        return RequestFieldRule.of(ComConstants.SERIAL_SEQ,(IRuleValidator<String>) StringUtils::isNotBlank, StringUtils.join(ComConstants.SERIAL_SEQ,StringUtils.isBlank(errorDesc)?"批次号字段规则检验不符合":errorDesc));
    }

    /**
     * 任务编号字段校验规则:
     * 语音模块使用(模板编号的概念)
     * (模板编号的概念)
     * @return
     */
    public static RequestFieldRule getTaskIdlRule(){
        return RequestFieldRule.of(SmsConstants.TASK_ID,(IRuleValidator<String>) StringUtils::isNotBlank, StringUtils.join(SmsConstants.TASK_ID,"任务编号字段规则检验不符合"));
    }

    /**
     * 账号字段
     * 含义:厂商通道的账号或业务类型(非所有通道都有值))
     *
     * @return
     */
    public static RequestFieldRule getAcctNolRule(String errorDesc){
        return RequestFieldRule.of(SmsConstants.ACCT_NO,(IRuleValidator<String>) StringUtils::isNotBlank, StringUtils.join(SmsConstants.ACCT_NO,errorDesc));
    }


    /**
     * 密码字段
     * @return
     */
    public static RequestFieldRule getAcctPasswordRule(String errorDesc){
        return RequestFieldRule.of(SmsConstants.ACCT_PASSWORD,(IRuleValidator<String>) value -> StringUtils.isNotBlank(value), StringUtils.join(SmsConstants.ACCT_PASSWORD,errorDesc));
    }
}